iT邦幫忙

2024 iThome 鐵人賽

DAY 16
0

昨天新建好服務後,接下來要先試著灌一些資料來測試搜尋功能。

不過首先沒有畫面還是比較不方便,幸好有好心人開源的 typesense-dashboard 專案可以方便檢視目前 Typesense 的內容物。

typesense-dashboard 也有提供 Docker ,就來加到目前 Dcoker compose 裡。


# docker-compose.yml
services:
  types0ense-dasbhoard:
    image: ghcr.io/bfritscher/typesense-dashboard:latest
    ports:
      - 8109:80

Dashboard 開好後開啟 localhost:8109 會看到設定連線資訊的畫面,輸入好就能登入。

如果想要省略這個登入的步驟,可以預建好設定資料的 config 並綁給容器,讓在啟動網站的同時直接進入。

# config.json
{
  "apiKey": "xyz",
  "node": {
    "host": "localhost",
    "port": "8108",
    "protocol": "http",
    "path": "",
    "tls": true
  }
}

# docker-compose.yml
services:
  typesense-dasbhoard:
    image: ghcr.io/bfritscher/typesense-dashboard:latest
    ports:
      - 8109:80
    volumes:
      - .path-to-config.json:/srv/config.json

https://res.cloudinary.com/dhcsjvhjg/image/upload/v1727698547/Screenshot_2024-09-30_at_8.14.43_PM_au1qmz.png

Dashboard 啟動後首先要新建 Collection 來設定要索引的資料結構,但這邊不曉得哪個環節出狀況,沒法直接在 Dashboard 上新建。

只好先用手工一點(?)的方法,用 curl 直接敲給 API。

首先下載 Typesense 官方提供的範例資料,解壓縮後得到一個 books.jsonl 檔案,有許多書籍的資料。

然後建立一個腳本執行新增 Collection 到灌資料的部分

# seed.sh
export TYPESENSE_API_KEY='xyz'
export TYPESENSE_HOST='http://localhost:8108'

# Create a collection 
curl "${TYPESENSE_HOST}/collections" \
      -X POST \
      -H "Content-Type: application/json" \
      -H "X-TYPESENSE-API-KEY: ${TYPESENSE_API_KEY}" -d '{
        "name": "books",
        "fields": [
          {"name": "title", "type": "string" },
          {"name": "authors", "type": "string[]", "facet": true },

          {"name": "publication_year", "type": "int32", "facet": true },
          {"name": "ratings_count", "type": "int32" },
          {"name": "average_rating", "type": "float" }       
        ],
        "default_sorting_field": "ratings_count"
      }'

# Import data
curl "${TYPESENSE_HOST}/collections/books/documents/import" \
      -X POST \
      -H "X-TYPESENSE-API-KEY: ${TYPESENSE_API_KEY}" \
      --data-binary "path-to-books.jsonl"

建立 collection 的步驟中有幾點注意:

  • default_sorting_field : 用於指定預設排序用的欄位,該欄位必須是 int32 / float 類型。
  • facet : 對欄位做額外的分類統計,例如統計同名作家有幾本書的資料。

確認資料灌成功後就能在 Dashboard 上檢視成果了。

https://res.cloudinary.com/dhcsjvhjg/image/upload/v1727699372/Screenshot_2024-09-30_at_8.29.18_PM_bozzvw.png

可以看到右下,被設定為 facet 的 authors 欄位呈現出作家的作品數量統計。

稍微打錯字 (mistbern) 的查詢結果算準確。

https://res.cloudinary.com/dhcsjvhjg/image/upload/v1727699760/Screenshot_2024-09-30_at_8.35.11_PM_s96ovh.png

這樣服務基礎就有了,再來看怎麼嵌入到 Nexjs 中。


上一篇
搜尋功能 Typesense
下一篇
在 Nextjs 使用 Typsense
系列文
Awesome self hosted 30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言